class Context:
    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        pass

    def do_something(self):
        pass


with Context() as f:
    f.do_something()

"""
推导思维：
    1. 类加括号产生对象
    2. 当对象被with传入上下文管理块，就要用到__enter__方法
    3. __enter__方法返回值为f， 使用该方法返回对象本身(self)
    4. 对象加点的方式调用功能
    5. 将该功能补全至类体代码中
    6. 子代码结束后，调用__exit__关闭with
"""


# 自定义字典类型并让字典能够通过句点符的方式操作键值对
"""
推导思维：
    1. 使用类继承dict方法
    2. 使用__setattr__方法，将键值对以索引赋值的方式传给self
    3. 使用__getattr__的方法，当对象点名字时，使用return的方式将值传出
    4. 上述两种方式分别可以实现以点的方式添加数值和取到数值
"""


class MyDict(dict):
    def __setattr__(self, key, value):
        self[key] = value